home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / smaltalk / manchest.lha / MANCHESTER / manchester / 4.1 / Set-collect.st < prev    next >
Text File  |  1993-07-24  |  1KB  |  34 lines

  1. "    NAME        Set-collect
  2.     AUTHOR        miw@cs.man.ac.uk (Mario Wolczko)
  3.     FUNCTION    Fixes a bug in Set>collect:
  4.     ST-VERSION    4.1
  5.     PREREQUISITES    
  6.     CONFLICTS    Set>collect:
  7.     DISTRIBUTION    world
  8.     VERSION        1
  9.     DATE         18 Sep 1991
  10. SUMMARY
  11. The default definition of Set>collect: doesn't use species, but
  12. creates a new Set, regardless of whether it is actually used in Set or a
  13. subclass.  I think this is a bug -- ParcPlace think it's a feature!!"
  14.  
  15. 'From Objectworks\Smalltalk(R), Release 4.1 of 15 April 1992 on 26 November 1992 at 3:07:42 pm'!
  16.  
  17.  
  18.  
  19. !Set methodsFor: 'enumerating'!
  20.  
  21. collect: aBlock  
  22.     "Evaluate aBlock with each of the values of the receiver as the  
  23.     argument.  Collect the resulting values into a Set that is like 
  24.     the receiver.  Answer the new Set."
  25.  
  26.     "Override the general method, so that we make a big enough set and avoid growing. "
  27.     "Set changed to self species, MIW, 26 Nov 1992"
  28.     | newSet size |
  29.     tally = 0 ifTrue: [^self species new: 2].
  30.     newSet := self species new: (size := self basicSize).
  31.     1 to: size do: [:index | | element |
  32.         (element := self basicAt: index) == nil ifFalse:
  33.             [newSet add: (aBlock value: element)]].
  34.     ^newSet! !